package com.atguigu.jxc.service.impl;

import com.alibaba.fastjson.JSON;
import com.atguigu.jxc.dao.GoodsDao;
import com.atguigu.jxc.dao.GoodsTypeDao;
import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.GoodsType;
import com.atguigu.jxc.service.GoodsTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Service
public class GoodsTypeServiceImpl implements GoodsTypeService {

    @Autowired
    private GoodsTypeDao goodsTypeDao;


    //"id": 1,
//        "text": "所有类别",
//        "state": "closed",
//        "iconCls": "goods-type",
//        "attributes": {
//        "state": 1
//    },
//            "children":
    @Override
    public Map<String, Object> getGoodsType() {

        //根据父id查询的类型列表
        List<GoodsType> goodsTypeList = goodsTypeDao.selectGoodsTypeBypId(-1);
        GoodsType goodsType = goodsTypeList.get(0);
        Map<String, Object> map = new HashMap<>();
        loadGoodsType(goodsType, map);
        String jsonString = JSON.toJSONString(map);
        System.out.println(jsonString);
        return map;
    }


    public Map<String, Object> loadGoodsType(GoodsType goodsType, Map<String, Object> map) {

        map.put("id", goodsType.getGoodsTypeId());
        map.put("text", goodsType.getGoodsTypeName());
        map.put("state", goodsType.getGoodsTypeState() == 1 ? "closed" : "open");
        map.put("iconCls", "goods-type");

        HashMap<String, Integer> map1 = new HashMap<>();
        map1.put("state", goodsType.getGoodsTypeState());
        map.put("attributes", map1);

        if (goodsType.getGoodsTypeState() == 0) {
            //叶子节点,没有孩子节点
            return map;
        } else {
            //根据父id查询子节点列表
            List<GoodsType> goodsTypeList = goodsTypeDao.selectGoodsTypeBypId(goodsType.getGoodsTypeId());

            List<Map<String, Object>> mapList = goodsTypeList.stream().map(goodsTypeChild -> {
                Map<String, Object> cMap = new HashMap<>();
                this.loadGoodsType(goodsTypeChild, cMap);
                return cMap;
            }).collect(Collectors.toList());

            map.put("children", mapList);
            return map;
        }
    }


    @Override
    public void saveGoodsType(String goodsTypeName, Integer pId) {
        goodsTypeDao.saveGoodsType(goodsTypeName, pId);
        GoodsType goodsType = goodsTypeDao.selectGoodsTypeById(pId);
        goodsType.setGoodsTypeState(1);
        goodsTypeDao.updateGoodsTypeState(goodsType);
    }

    @Override
    public void deleteGoodsType(Integer goodsTypeId) {
        //取出当前类型
        GoodsType goodsType = goodsTypeDao.selectGoodsTypeById(goodsTypeId);
        //根据当前父id查询，看是否有其他兄弟
        List<GoodsType> goodsTypeList = goodsTypeDao.selectGoodsTypeBypId(goodsType.getPId());
        if (goodsTypeList == null) {
            //没有其他兄弟，修改父节点state = 0
            GoodsType goodsTypeP = goodsTypeDao.selectGoodsTypeById(goodsType.getPId());
            goodsTypeP.setGoodsTypeState(0);
            goodsTypeDao.updateGoodsTypeState(goodsType);
        }
        //删除该节点
        goodsTypeDao.deleteGoodsType(goodsTypeId);

    }


}
